package com.company.dcm.server.tcp;

import com.company.dcm.common.SpringBeanUtil;
import com.company.dcm.server.protocol.ProtocolMessage;
import com.company.dcm.server.protocol.ProtocolMessageDecoder;
import com.company.dcm.server.protocol.ProtocolMessageEncoder;
import com.company.dcm.server.protocol.enums.ProtocolMessageTypeEnum;
import com.company.dcm.server.protocol.ProtocolTask;
import io.vertx.core.Vertx;
import io.vertx.core.buffer.Buffer;
import io.vertx.core.net.NetServer;
import lombok.extern.slf4j.Slf4j;

import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.List;

/**
 * @Author: 王泽同
 * @Description:
 */
//@Slf4j
//public class VertxTcpServer {
//
//    private byte[] handleRequest(ProtocolMessage protocolMessage) throws IOException {
//        log.info(protocolMessage.toString());
//        List<ProtocolTask> tasks = protocolMessage.getBody();
//        ProtocolMessageTypeEnum type = protocolMessage.getHeader().getType();
//        TCPService tcpService = SpringBeanUtil.getBean("TCPService");
//        byte[] response = new byte[]{0};
//        boolean hasMessage = false;
//        ProtocolMessageEncoder encoder = new ProtocolMessageEncoder();
//        for (ProtocolTask task : tasks) {
//            if(type == ProtocolMessageTypeEnum.INFORMATION){
//                switch (task.getOption()){
//
//                    case SET_RT_DEVICE_INFO: tcpService.setRT_DeviceInfo(task.getValues());break;
//                    case ADD_RF_ClothSheetDetail: tcpService.addRF_ClothSheetDetail(task.getValues());break;
//                    case EDIT_OR_ADD_RF_ClothSheet: tcpService.editOrAddRF_ClothSheet(task.getValues());break;
//                    case GET_CLOTH_INFO:  {
//                        encoder.encode(tcpService.getClothInfo(task.getValues()));
//                        hasMessage = true;
//                        break;
//                    }
//
//                    case CHECK_UPDATE: {
//                        encoder.encode(tcpService.checkUpdate(task.getValues()));
//                        hasMessage = true;
//                        break;
//                    }
//
//                    case EQUIPMENT_MODEL:
//                    case BATTERY_STATUS:
//                    case EQUIPMENT_SERIAL:
//                    case FIRMWARE_VERSION:
//                    case DEVICE_STATUS:
//                    case USER_AUTHENTICATION:
//
//                    default: break;
//                }
//            } else if (type==ProtocolMessageTypeEnum.DATA_PASSTHROUGH_PACKET) {
//                switch (task.getOption()){
//                    case GET_MES_SWITCH_DETECTION:{
//                        encoder.encode(tcpService.getMESSwitchDetection(task.getValues()));
//                        hasMessage = true;
//                        break;
//                    }
//                    case GET_MES_CAMERA:{
//                        encoder.encode(tcpService.getMESCamera(task.getValues()));
//                        hasMessage = true;
//                        break;
//                    }
//                    case GET_MES_IMAGE_REPORT:{
//                        encoder.encode(tcpService.getMESImageReport(task.getValues()));
//                        hasMessage = true;
//                        break;
//                    }
//                }
//            }
//        }
//        if(hasMessage){
//            return encoder.getMessage();
//        }
//        return response;
//    }

//    public void doStart(int port) {
//        // 创建 Vert.x 实例
//        Vertx vertx = Vertx.vertx();
//        // 创建 TCP 服务器
//        NetServer server = vertx.createNetServer();
//        //处理请求
//        server.connectHandler(socket -> {
//            // 处理连接
//            socket.handler(buffer -> {
//                ProtocolMessage message = new ProtocolMessage();
//                //处理接收到的字节数组
//                try {
//                    message = ProtocolMessageDecoder.decode(buffer);
//                } catch (IOException e) {
//                    e.printStackTrace();
//                }
//                //在这里进行自定义的字节数组处理逻辑，比如解析请求、调用服务、构造响应
//                byte[] responseData = new byte[0];
//                try {
//                    responseData = handleRequest(message);
//                } catch (IOException e) {
//                    e.printStackTrace();
//                }
//                // 发送响应
//                socket.write(Buffer.buffer(responseData));
//            });
//        });
//        //启动 TCP 服务器并监听指定端口
//        server.listen(port, result -> {
//            if (result.succeeded()) {
//                log.info("TCP server started on port" + port);
//            } else {
//                log.info("Failed to start TCP server:" + result.cause());
//            }
//        });
//    }
//
//    public static void main(String[] args) {
//        new VertxTcpServer().doStart(9989);
//    }
//}
